{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 19\n",
    "\n",
    "# 一元函数极小值点\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "02cf3a64-acef-499e-804b-688e1f267e5b",
   "metadata": {},
   "source": [
    "这段代码使用数值优化和符号微分来分析并绘制函数\n",
    "\n",
    "$$\n",
    "f(x) = -2x e^{-x^2}\n",
    "$$\n",
    "\n",
    "在给定区间内的最小值及其导数行为。\n",
    "\n",
    "首先，通过数值方法最小化 $f(x)$，找到局部最小值点 $x_{\\text{min}}$。优化结果表明，算法成功找到一个使得 $f(x)$ 最小的 $x$ 值。在该点处，$f(x)$ 的导数应该接近零，因为在局部最小值附近，函数的斜率会趋于零。\n",
    "\n",
    "随后，代码在区间 $[-2, 2]$ 上绘制目标函数 $f(x)$，并在曲线上标记出最小值点 $x_{\\text{min}}$，展示了函数曲线的整体形状和极小值的位置。\n",
    "\n",
    "最后，代码计算了 $f(x)$ 的一阶导数\n",
    "\n",
    "$$\n",
    "f'(x) = -2 e^{-x^2} + 4x^2 e^{-x^2}\n",
    "$$\n",
    "\n",
    "并绘制导数曲线，以显示导数在不同 $x$ 值下的变化。在 $x_{\\text{min}}$ 附近，$f'(x)$ 接近零，这验证了函数在该点的极小性质。导数曲线还提供了 $f(x)$ 的增减性信息，通过观察 $f'(x)$ 的符号，可以分析 $f(x)$ 在不同区间上的递增或递减行为。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15f0015a-f205-43c2-bda4-fd6861eb4d75",
   "metadata": {},
   "source": [
    "## 导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9c6340a6-509e-4391-9bb5-259727ff2804",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from scipy import optimize\n",
    "import numpy as np\n",
    "from sympy import lambdify, diff, exp\n",
    "from sympy.abc import x  # 导入符号 x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0de5f8e-abde-4ae9-9fcf-63e3f91e5f44",
   "metadata": {},
   "source": [
    "## 定义函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "179da7cf-9b77-48b2-b9a5-97cde2212340",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 x e^{- x^{2}}$"
      ],
      "text/plain": [
       "-2*x*exp(-x**2)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_x = -2 * x * exp(-x**2)  # 定义目标函数 f(x) = -2x * exp(-x^2)\n",
    "f_x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "37d80f7d-289d-40d7-ab0e-b94c3589c8e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "obj_f = lambdify(x, f_x)  # 将符号函数转换为数值函数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b41b792-ba50-47b6-a7c2-c3c33b3baa52",
   "metadata": {},
   "source": [
    "## 优化求解目标函数的最小值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d5cf275b-d221-4a30-aea4-c74fe7c398db",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== Success ===\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "result = optimize.minimize_scalar(obj_f)  # 使用数值方法最小化目标函数\n",
    "print('=== Success ===')  # 打印求解是否成功\n",
    "print(result.success)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "02fd0960-8b5e-46e7-b7c4-d911b15ff42c",
   "metadata": {},
   "outputs": [],
   "source": [
    "x_min = result.x  # 提取最小值点 x 的位置\n",
    "\n",
    "x_array = np.linspace(-2, 2, 100)  # 定义 x 的取值范围\n",
    "y_array = obj_f(x_array)  # 计算目标函数在 x_array 上的取值"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc830804-0e6a-4e92-beba-0ce4e02a6cb2",
   "metadata": {},
   "source": [
    "## 绘制目标函数图像及最小值点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "52981d8a-bc82-4f87-bffa-838cc731f7db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Hjz77LMYMWKE06VoY926dejcuTMWLFiAI444Iqfv0XJk15JctgwiKkWJRALvvfceBg8evM3XBw8ejMWLFztUFVHx1NfXA4Cl12w2OwBfffUVbrvtNowePdrpUogs+/HHH5FOp9GlS5dtvt6lSxd8//33DlVFVBymaeLyyy/H4YcfjgMOOCDn73NVs5swYQI8Hs9O/yxfvnyb71m7di1+85vf4OSTT8Yf//hHhyovT/nkTcXj8Xi2+dw0zWZfIyp3F110EVatWoVHH33U0veVxdqYuSr2lkG0Lat5U3FUV1fD5/M1G8XV1dU1G+0RlbOLL74Yzz//PBYuXNhsneTWuKrZccsgWVbypuKprKxEnz59MHfuXJxwwglNX587dy6GDx/uYGVEhWGaJi6++GI8++yzmD9/Prp37275OVzV7HLFLYPk1dbWYsOGDaitrUU6ncaKFSsAAPvuuy8ikYizxbnA5ZdfjrPOOgt9+/ZtulJRW1vL96GLpKGhATU1NU2ff/3111ixYgU6duyIbt26OViZO40ZMwaPPPIInnvuObRp06bpKka7du0QDAZzexJTQzNnzjQBtPiHimPkyJEt5j1v3jynS3ONO+64w9xzzz3NyspKs3fv3uaCBQucLsm15s2b1+LxPHLkSKdLc6UdvV7PnDkz5+fgPDsiInI9vlFFRESux2ZHRESux2ZHRESux2ZHRESux2ZHRESux2ZHRESux2ZHRESux2ZHRESux2ZHRESux2ZHRESux2ZHVObWrVuHXXfdFVOnTm362tKlS1FZWYnXXnvNwcqISgfXxiRygZdffhkjRozA4sWL0aNHDxx00EE47rjjMH36dKdLIyoJbHZELjFmzBi8/vrrOPjgg7Fy5UosW7YMVVVVTpdFVBLY7IhcIhaL4YADDsC3336L5cuX48ADD3S6JKKSwffsiFxi9erVWLt2LTKZDL755hunyyEqKRzZEblAIpHAIYccgl69eqFHjx7417/+hQ8//BBdunRxujSiksBmR+QCV155JZ566imsXLkSkUgEgwYNQps2bfDiiy86XRpRSeBlTKIyN3/+fEyfPh2zZ89G27Zt4fV6MXv2bLz11luYMWOG0+URlQSO7IiIyPU4siMiItdjsyMiItdjsyMiItdjsyMiItdjsyMiItdjsyMiItdjsyMiItdjsyMiItdjsyMiItdjsyMiItdjsyMiItdjsyMiItf7/6Bi8kZXQcaVAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "plt.plot(x_array, y_array, color='b')  # 绘制目标函数曲线\n",
    "plt.plot(x_min, obj_f(x_min), color='r', marker='x', markersize=12)  # 标记最小值点\n",
    "\n",
    "plt.xlabel('x'); plt.ylabel('f(x)')\n",
    "plt.xticks(np.linspace(-2, 2, 5)); plt.yticks(np.linspace(-2, 2, 5))\n",
    "plt.axis('scaled'); ax.set_xlim(-2, 2); ax.set_ylim(-2, 2)\n",
    "ax.spines['top'].set_visible(False); ax.spines['bottom'].set_visible(False)\n",
    "ax.spines['left'].set_visible(False); ax.spines['right'].set_visible(False)\n",
    "ax.grid(linestyle='--', linewidth=0.25, color=[0.5, 0.5, 0.5])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75a07421-2cc0-4cd6-aef4-76949a1128e3",
   "metadata": {},
   "source": [
    "## 绘制一阶导数图像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "1324bf50-ceff-4067-a9e0-832e7d034d3d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 x^{2} e^{- x^{2}} - 2 e^{- x^{2}}$"
      ],
      "text/plain": [
       "4*x**2*exp(-x**2) - 2*exp(-x**2)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_x_1_diff = diff(f_x, x)  # 计算 f(x) 的一阶导数\n",
    "f_x_1_diff"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "956a0705-f894-46ee-be57-a647ba05a1c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "f_x_1_diff_fcn = lambdify(x, f_x_1_diff)  # 将导数转换为数值函数\n",
    "f_x_1_diff_array = f_x_1_diff_fcn(x_array)  # 计算一阶导数在 x_array 上的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6e5ca995-7967-4900-8206-a590246681f4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "plt.plot(x_array, f_x_1_diff_array, color='b')  # 绘制一阶导数曲线\n",
    "plt.plot(x_min, f_x_1_diff_fcn(x_min), color='r', marker='x', markersize=12)  # 标记一阶导数在最小值点的值\n",
    "\n",
    "plt.xlabel('x'); plt.ylabel('f\\'(x)')\n",
    "plt.xticks(np.linspace(-2, 2, 5)); plt.yticks(np.linspace(-2, 2, 5))\n",
    "plt.axis('scaled'); ax.set_xlim(-2, 2); ax.set_ylim(-2, 2)\n",
    "ax.spines['top'].set_visible(False); ax.spines['bottom'].set_visible(False)\n",
    "ax.spines['left'].set_visible(False); ax.spines['right'].set_visible(False)\n",
    "ax.grid(linestyle='--', linewidth=0.25, color=[0.5, 0.5, 0.5])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
